這篇文章接下來我們要談談《 企業應用架構模式- Martin Fowler 》這本書中所提 domain 的三種 patterns 的第二種『 Domain Model 』。
這是我從書中,自已提出的想法,我認為 domain model 為 :
將每個業務領域都定義成個實體,並且創建一個這些實體的關係網,然後每個實體中都有所謂的資料與行為。
我個人是為了 OO 算是是一種 domain model 的開發方式,然後 domain model class 基本上要包含 :
然後在書中有提到兩種風格 :
以上兩種風格的就在於,一個適合簡單,一個適合複雜…… 就是這樣。其中『 Active Record 』與『 Data Mapper 』在之後的文章會提到,它是在 3-tier 的資料層。
Anemic domain model
// Transaction Script
class CartService{
async checkout(){
// 取出購物車要結帳的商品
const products = this.cart.items
// 建立訂單
const order = await orderDao.create(orderBody)
// 建立付款記錄
const payment = await paymentDao.create(paymentBody)
// 建立發票
const invoice = await invoiceDao.create(invoiceBody)
}
}
// Domain Model
class Cart{
id: String
items: Product[]
async addItem(product: Product){
this.items.push(product)
}
async chekcout(){
}
}
class Order{
id: string
products: Product[]
construct(productDao:ProductDao){
this.productDao = productDao
}
async chekcout(){
this.productDao.save({
products
})
return this.id
}
}
class Payment{
async checkout(){
}
}